<?php

class XmlUtil{

	public static function Factory(){
		return new XmlUtil();
	}

	public function arrayToXml($arr,$dom=0,$item=0,$root="root"){
		if (!$dom){
			$dom = new DOMDocument("1.0","UTF-8");
		}
		if(!$item){
			$item = $dom->createElement($root);
			$dom->appendChild($item);
		}
		foreach ($arr as $key=>$val){
			$itemx = $dom->createElement(is_string($key)?$key:"item");
			$item->appendChild($itemx);
			if (!is_array($val)){
				$text = $dom->createTextNode($val);
				$itemx->appendChild($text);

			}else {
				$this->arrayToXml($val,$dom,$itemx);
			}
		}
		return $dom->saveXML();
	}

	public function entityToXml($entity,$dom=0,$item=0){
		if (!$dom){
			$dom = new DOMDocument("1.0","UTF-8");
		}
		if(!$item){
			$item = $dom->createElement($entity->entityName);
			$dom->appendChild($item);
		}
		if($entity instanceof Entity){
			$arr = $entity->entityValue;
		}else{
			$arr = $entity;
		}

		if (is_array($arr)){
			foreach ($arr as $key=>$val){
				$nodeName = "item";
				if($val instanceof Entity){
					$nodeName = $val->entityName;
					$nodeValue = $val->entityValue;
					$itemx = $dom->createElement(is_string($key)?$key:$nodeName);
					$item->appendChild($itemx);
					if (!is_array($nodeValue)){
						if (empty($nodeValue)){
							$nodeValue = "";
						}
						$text = $dom->createTextNode($nodeValue);
						$itemx->appendChild($text);

					}else {
						$this->entityToXml($nodeValue,$dom,$itemx);
					}
				}else{
					if (!is_array($val)){
						$itemx = $dom->createElement($key);
						$item->appendChild($itemx);
						$text = $dom->createTextNode($val);
						$itemx->appendChild($text);
					}else{
						$this->entityToXml($val,$dom,$itemx);
					}
				}
			}
		}
		return $dom->saveXML();
	}
}
